package com.zyh.um.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.zyh.um.dao.UserDao;
import com.zyh.um.entity.User;
import com.zyh.um.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserDao userDao;
    /**
     * 保存用户户
     *
     * @param user
     */
    @Override
    public void saveUser(User user) {
        userDao.saveUser(user);
    }

    /**
     * 根据密码和用户名查询用户
     *
     * @param user
     * @return
     */
    @Override
    public User queryUserByNameAndPassword(User user) {
        return userDao.queryUserByNameAndPassword(user);
    }

    /***
     *
     * @param pageIndex
     * @param pageSize
     * @param column 模糊查询列
     * @param value 模糊值
     * @return
     */
    @Override
    public List<User> queryUserByPage(Integer pageIndex, Integer pageSize, String column, Object value) {
        //        1,声明开始分页
        PageHelper.startPage(pageIndex,pageSize);
//        2,调用mapper的查询所有
        List<User> users = userDao.selectAll();
        List<User> collect = users.stream().filter(new Predicate<User>() {
            @Override
            public boolean test(User user) {
                switch (column) {
                    case "username":
                        return user.getName().contains(value.toString());
                }
                return false;
            }
        }).collect(Collectors.toList());
//        3,创建PageInfo对象
        PageInfo<User> pageInfo = new PageInfo<>(collect);
        return pageInfo.getList();
    }

    /**
     * 查询用户总条数
     *
     * @param column
     * @param value
     * @return
     */
    @Override
    public int queryUserCount(String column, Object value) {
        return userDao.queryCount(column, value);
    }

    /**
     * 根据ID查询用户信息
     *
     * @param id
     * @return
     */
    @Override
    public User queryUserById(Integer id) {
        return userDao.queryUserById(id);
    }

    /**
     * 根据IDS删除用户
     *
     * @param ids a.可以调用dao接口中的deleteByUserIds完成批量删除
     *            b.在service实现类中，通过循环调用dao接口中的deleteByUserId(id)
     */
    @Override
    public void deleteByUserIds(Integer[] ids) {
        userDao.deleteByUserIds(ids);
    }

    /**
     * 更新用户信息
     *
     * @param user
     */
    @Override
    public void updateUser(User user) {
        userDao.updateUser(user);
    }
}
